Disconnect idle handlers on destroy to avoid problems when they are called
authorMatthias Clasen <mclasen@redhat.com>
Fri, 2 Sep 2005 19:48:53 +0000 (19:48 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 2 Sep 2005 19:48:53 +0000 (19:48 +0000)
2005-09-02  Matthias Clasen  <mclasen@redhat.com>

* gtk/gtkentry.c (gtk_entry_destroy): Disconnect idle handlers
on destroy to avoid problems when they are called on a destroyed
widget.  (#315135, John Cupitt)

ChangeLog
ChangeLog.pre-2-10
gtk/gtkentry.c

index 8616383f0ee2a462de79702e2594ef65f2d2b182..8d91cf1af148deb339e988f80997224be20991bf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
 2005-09-02  Matthias Clasen  <mclasen@redhat.com>
 
-       * gtk/gtkentry.c (gtk_entry_class_init): 
+       * gtk/gtkentry.c (gtk_entry_destroy): Disconnect idle handlers
+       on destroy to avoid problems when they are called on a destroyed
+       widget.  (#315135, John Cupitt)
+       
+       * gtk/gtkentry.c (gtk_entry_class_init):
        * gtk/gtktextview.c (gtk_text_view_class_init): Add bindings
        for Ctrl-Shift-A to unselect all.  (#309301, Kathy Fernandes)
 
index 8616383f0ee2a462de79702e2594ef65f2d2b182..8d91cf1af148deb339e988f80997224be20991bf 100644 (file)
@@ -1,6 +1,10 @@
 2005-09-02  Matthias Clasen  <mclasen@redhat.com>
 
-       * gtk/gtkentry.c (gtk_entry_class_init): 
+       * gtk/gtkentry.c (gtk_entry_destroy): Disconnect idle handlers
+       on destroy to avoid problems when they are called on a destroyed
+       widget.  (#315135, John Cupitt)
+       
+       * gtk/gtkentry.c (gtk_entry_class_init):
        * gtk/gtktextview.c (gtk_text_view_class_init): Add bindings
        for Ctrl-Shift-A to unselect all.  (#309301, Kathy Fernandes)
 
index 5bf530ddea3cb747eedab2023b73efa8f8fe137f..8d1e16f3598419ab1df4485c72163df6cc39c604 100644 (file)
@@ -1071,6 +1071,18 @@ gtk_entry_destroy (GtkObject *object)
   gtk_entry_reset_im_context (entry);
   gtk_entry_reset_layout (entry);
 
+  if (entry->blink_timeout)
+    {
+      g_source_remove (entry->blink_timeout);
+      entry->blink_timeout = 0;
+    }
+
+  if (entry->recompute_idle)
+    {
+      g_source_remove (entry->recompute_idle);
+      entry->recompute_idle = 0;
+    }
+
   if (!entry->visible)
     {
       /* We want to trash the text here because the entry might be leaked.  */